[iOS] Kiwi で機能の振る舞いをテストしよう #1 導入編

[iOS] Kiwi で機能の振る舞いをテストしよう #1 導入編

Clock Icon2014.02.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

機能の振る舞いをテスト!

Kiwi は iOS アプリの機能の振る舞いをテストすることを目的としたテスティングフレームワークです。Ruby の RSpec 風にテストコードが記述できる特徴があります。自然言語に近く、可読性が高いのでそのまま要求仕様の確認を行うことができます。また逆に要求仕様からテストコードに起こす場合もスムーズに進めることができます。

ということで、今回は Kiwi を導入して簡単なテストを実行するところまでやってみましょう。

実行環境

  • Mac OS X 10.9.1 Mavericks
  • Xcode 5.0.2
  • CocoaPods 0.29
  • Kiwi 2.2.3

テスト対象の iOS アプリの Deployment Target は iOS 7 としています。

まずは環境構築

まずテスト用のTargetを用意する必要がありますが、Xcode 5で新規プロジェクトを作成すると自動で作成してくれます。

kiwi01

インストール

次に CocoaPods で Kiwi をインストールします。XCTest を使いたい場合は Kiwi/XCTest も追加します。

platform :ios, "6.0"

target "ToDoSampleTests" do

  pod "Kiwi"
  pod "Kiwi/XCTest"

end
pod install

テスト用の Target の設定の確認

設定を確認します。まず <プロジェクト名>.xcworkspace を開き、Project Navigator から プロジェクトを選択し、Info タブの Configrations セクションの Debug, Release の テスト用の Target の 設定ファイルが Pods-<TargetName>.xcconfig になっていることを確認します。

kiwi02

次にテスト用の Target の Build Settings タブを開き、Other Linker Flags に -ObjC -framework SenTestingKit が追加されていることを確認します(XCTest を使っている場合は -framework XCTestも)。

kiwi03

Bundle Loader に $(BUILT_PRODUCTS_DIR)/MyProject.app/ApplicationTargetName となっていることも確認します。

kiwi04

Scheme の設定の確認

次に Scheme を追加します。メニューから 「Product」 > 「Scheme」 > 「EditScheme...」 を選択します。

kiwi05

左のサイドパネルから「Test」を選択し、テスト用の Target が表示されていることを確認します。

kiwi06

テストを書いて実行してみる

それでは簡単なテストを書いてみましょう。テスト用の Target が新規作成したままであれば <TargetName>.m というファイルがあると思うので、このファイルを開いて次のコードに書き換えます。Kiwi で書くテストケースはこんな感じになります。RSpec っぽくもあり、Objective-C っぽくもある絶妙な書き方ですよね。読みやすいです。

#import "Kiwi.h"

SPEC_BEGIN(MathSpec)

describe(@"Math", ^{
    it(@"この計算式は合っておる", ^{
        NSUInteger a = 16;
        NSUInteger b = 26;
        [[theValue(a + b) should] equal:theValue(42)];
    });
});

SPEC_END

実行してみます。Command + U で実行できます。Xcode のショートカットが使えるのは良いですね。気軽にテストが実行できます。

kiwi07

まとめ

そんな感じで導入編でした。Xcode 5 からテスト用の Target の設定を自動でしてくれるので導入がかなり簡単になりました。次回以降は Kiwi のテストの書き方を解説していきたいと思います。

参考

Kiwi の公式 Wiki と、日本語の Kiwi を解説している記事を寄せ集めてみました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.